package com.sjz.myfrist;

import android.content.ContentValues;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.speech.tts.TextToSpeech;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.Locale;

/***
 *  数据库操作   SQLite数据库
 SQLite是一款轻量级的关系型数据库 Android把这个功能内置到了系统中
 *  只修改了一句代码，在创建MyDatabaseHelper实例时，传入的第四个参数是版本号，将1修改成比1大的数，就可以让onUpgrade()方法执行了
 */
public class DbActivity extends AppCompatActivity {

    private MyDatabaseHelper dbHelper;
    private TextView sqlite_view;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.db);
        //第四个表示当前数据库的版本号，可用于对数据库升级
        // dbHelper = new MyDatabaseHelper(this, "Boodb_crate_idkStore.db", null, 1);
        dbHelper = new MyDatabaseHelper(this, "BookStore.db", null, 2);

        Button createDatabase = (Button) findViewById(R.id.db_crate_id);
        sqlite_view =findViewById(R.id.sqlite_view);
        sqlite_view.setSingleLine(false);//多行模式
        sqlite_view.setEllipsize(TextUtils.TruncateAt.END);//设置换行
        //  在onCreate()方法中，构建了一个MyDatabaseHelper对象，并通过构造函数的参数将数据库名指定为BookStore.db，版本号为1，然后在按钮的点击事件里调用getWritableDatabase()方法，即可创建数据库。
        createDatabase.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dbHelper.getWritableDatabase();
            }
        });

        //添加数据
        Button addData = findViewById(R.id.add_data);
        addData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Log.i("DbActivity","addData");
                // 调用SQLiteOpenHelper的getReadableDatabase()或getWritableDatabase()方法可以创建和升级数据库，这两个方法还会返回一个SQLiteDatabase对象，借助这个对象即可对数据进行CRUD操作了。
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                //下面组装第一条数据
                values.put("name", "四月天行健");
                values.put("author", "zxy");
                values.put("pages", "521");
                values.put("price", "9.9");
                //第一个是表名  第二个是用于在未指定添加数据的情况下给某些可为空的列自动赋值NULL，一般用不到此功能；
                //第三个是一个ContentValues对象，它提供了一系列的put()方法重载，用于向ContentValues中添加数据，只需将表中的每个列名以及相应的待添加数据 传入即可。
                db.insert("Book", null, values);
                values.clear();
                //下面组装第二条数据
                values.put("name", "Android入门到实战");
                values.put("author", "zxy");
                values.put("pages", "521");
                values.put("price", "9.9");
                db.insert("Book", null, values);
                Toast.makeText(DbActivity.this, "添加成功！！！", Toast.LENGTH_SHORT).show();
            }
        });


        /**
         查询数据是四个操作中最复杂的，query()方法用于查询数据，有7个参数。
         第一个是表名；
         第二个用于指定查询哪几列，如果不指定默认查询所有列；
         第三四个参数用于约束查询某一行或某几行的数据，不指定则默认查询所有行；
         第五个用于指定需要去group by的列，不指定则表示不对查询结果进行group by操作；
         第六个参数用于对group by之后的数据进行进一步的过滤，不指定则表示不过滤；
         第七个用于指定查询结果的排列方式，不指定则使用默认的排序方式。
          **/
        Button queryButton = findViewById(R.id.query_data);
        queryButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                //查询Book表中所有数据
                Cursor cursor = db.query("Book", null, null, null, null, null, null);
                sqlite_view.setText("");
                String content="";
                if (cursor.moveToFirst()) {  //移动到第一个下表
                    do {
                        //遍历Cursor对象，取出数据打印
                        String id = cursor.getString(cursor.getColumnIndexOrThrow("id"));
                        String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));
                        String author = cursor.getString(cursor.getColumnIndexOrThrow("author"));
                        int pages = cursor.getInt(cursor.getColumnIndexOrThrow("pages"));
                        double price = cursor.getDouble(cursor.getColumnIndexOrThrow("price"));
                        Log.d("DbActivity", "id：" + id);
                        content=content+"id：" + id+"\n";
                        Log.d("DbActivity", "名字：" + name);
                        content=content+"名字：" + name+"\n";
                        Log.d("DbActivity", "作者：" + author);
                        content=content+"作者：" + author+"\n";
                        Log.d("DbActivity", "书页：" + pages);
                        content=content+"书页：" + pages+"\n";
                        Log.d("DbActivity", "价格：" + price);
                        content=content+"价格：" + price+"\n";

                    } while (cursor.moveToNext());//是否有下一个
                }
                cursor.close();
                //sqlite_view.setText("这是第一行文本\n这是第二行文本\n这是第三行文本");
                sqlite_view.setText(content);

            }
        });

        //更新
        Button updateData = findViewById(R.id.update_data);
        updateData.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                ContentValues values = new ContentValues();
                values.put("price", 39.9);
                db.update("Book", values, "name = ?", new String[]{"四月天行健"});
                Toast.makeText(DbActivity.this, "更新成功", Toast.LENGTH_SHORT).show();
            }
        });


        //删除
        Button deleteButton = findViewById(R.id.delete_data);
        deleteButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                 SQLiteDatabase db = dbHelper.getWritableDatabase();
                 Cursor cursor = db.query("Book", null, null, null, null, null, null);
                if (cursor.moveToFirst()) {  //移动到第一个下表
                    String id = cursor.getString(cursor.getColumnIndexOrThrow("id"));
                    db.delete("Book","id =?",new String[] {id});
                }
                cursor.close();
            }
        });


        //删除所有的数据
        Button deleteAllButton = findViewById(R.id.delete_all_data);
        deleteAllButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String tableName = "Book";
                String query = "DELETE FROM " + tableName;
                SQLiteDatabase db = dbHelper.getWritableDatabase();
                db.execSQL(query);
            }
        });

    }

}